# xmind转自测系统导入格式

分两部分

# xmind-json

# 读取xmind

直接使用

fs.readFileSync

# jszip

使用jszip解析xmind。直接fs读的话js无法操作。

const zip = new JSZip();
//解压缩xmind文件
const res = await zip.loadAsync(this.data, {
    optimizedBinaryString: true
});

解析出的对象中的content.xml就是所需的数据

通过jszip的file方法将content.xml对象字符化

await res.file(file.name).async('string')

# xml-formatter

将content.xml字符转为正常格式的xml

const format = require('xml-formatter')

format(fileVal, {
	collapseContent: true
})

# xml-js

将xml转成json

const convert = require('xml-js')

const json = JSON.parse(convert.xml2json(xml), {
    compact: true,
    spaces: 4
}));

# 处理json

得到的json很多无用的层级、数据,需要进一步精简。同时对xmind中特殊符号需要进行处理

通过递归解析出树形结构

let node = {
    children: this.transformChildren(topic || children, imgFiles),
    data: {
        text: this.transformText(data),
        remark: this.transformRemark(data),
        label: this.transformLabel(data),
        image: this.transformImage(data, imgFiles),
        markers: this.transformMarker(data)
    }
};

# json-xlsx

对json按照自测平台的字段,递归解析出来。

再转为xlsx

const xlsx = require('xlsx');

let ss = xlsx.utils.json_to_sheet(this.cases);
let workbook = {
    SheetNames: ['测试用例'],
    Sheets: {
        '测试用例': Object.assign({}, ss)
    },
};
xlsx.writeFile(workbook, this.output);